<script>
    // 下面代码是否可以，每隔1000MS依次输出 0 1 2 3 4 5 ? 
    // 如果不可以，说明为啥？以及如何解决？
    // for循环是同步代码   定时器是异步代码
    // 同步代码执行完毕后，i的值已经变了6
    // for (var i = 0; i < 6; i++) {
    //     setTimeout(function () {
    //         console.log(i);
    //     }, (i + 1) * 1000);
    // }

    // 利用闭包解决
    // for (var i = 0; i < 6; i++) {
    //     (function (i) {
    //         setTimeout(function () {
    //             console.log(i);
    //         }, (i + 1) * 1000);
    //     })(i)
    // }

    // 利用块级作用域
    // let + {} 会形成块级作用域
    // for (let i = 0; i < 6; i++) {
    //     setTimeout(function () {
    //         console.log(i);
    //     }, (i + 1) * 1000);
    // }

    // 利用闭包解决
    for (let i = 0; i < 6; i++) {
        setTimeout((function (i) {
            return function () {
                console.log(i);
            }
        })(i), i * 1000)
    }
</script>

























<!-- <script>
    // 解析 

    // 方法一：
    for (var i = 0; i < 6; i++) {
        (function (i) {
            setTimeout(function () {
                console.log(i);
            }, (i + 1) * 1000);
        })(i)
    }

    // 方法二：
    for (let i = 0; i < 6; i++) {
        setTimeout(function () {
            console.log(i);
        }, (i + 1) * 1000);
    }

    // 方法三：
    for (var i = 0; i < 6; i++) {
        setTimeout((function (i) {
            return function () {
                console.log(i)
            }
        })(i), i * 1000);
    }
</script> -->